home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / dmove86 / abssec2.a86 next >
Text File  |  1994-05-20  |  2KB  |  127 lines

  1. ; ディスクの直接操作関数
  2.  
  3. CGROUP    group    TEXT
  4.  
  5. TEXT    CSEG
  6.  
  7. ;
  8. ;readabssec(void far *buf, unsigned long sector,unsigned secno,int drive)
  9. ;
  10. ;BXAX==buf, DXCX==sector,[BP+4]==secno,[BP+6]==drive
  11. ;
  12. ;リターン値の上位8ビットがCF、下位8ビットがALの値
  13.  
  14. readabssec_::
  15.  
  16.     push    BP
  17.     mov    BP,SP
  18.     push    DS
  19.     push    CX
  20.     push    DX
  21.     push    SI
  22.     push    DI
  23.  
  24.     cmp    [_osmajor_##].B,4
  25.     jc    rdabs_16bit
  26.  
  27. rdabs_32bit:
  28.     sub    SP,10
  29.     mov    DI,BX
  30.     mov    BX,SP
  31.     mov    SI,SS
  32.     mov    DS,SI
  33.     mov    [BX],CX        ; sector(Low)
  34.     mov    [BX+2],DX    ; sector(High)
  35.     mov    DX,[BP+4]
  36.     mov    [BX+4],DX    ; secno
  37.     mov    [BX+6],AX    ; buf(offset)
  38.     mov    [BX+8],DI    ; buf(segment)
  39.  
  40.     mov    AL,[BP+6]
  41.     mov    CX,-1
  42.     int    25h
  43.     add    SP,12
  44.  
  45.     jmp    rdabs_endop
  46.  
  47. rdabs_16bit:
  48.     mov    DS,BX
  49.     mov    BX,AX
  50.     mov    DX,CX
  51.     mov    CX,[BP+4]
  52.     mov    AL,[BP+6]
  53.     int    25h
  54.     pop    CX
  55.  
  56. rdabs_endop:
  57.     pop    DI
  58.     pop    SI
  59.     pop    DX
  60.     pop    CX
  61.     pop    DS
  62.     pop    BP
  63.  
  64.     sbb    AH,AH
  65.  
  66.     ret
  67. ;
  68. ;writeabssec(void far *buf, unsigned long sector,unsigned secno,int drive)
  69. ;
  70. ;BXAX==buf, DXCX==sector,[BP+4]==secno,[BP+6]==drive
  71. ;
  72. ;リターン値の上位8ビットがCF、下位8ビットがALの値
  73.  
  74. writeabssec_::
  75.  
  76.     push    BP
  77.     mov    BP,SP
  78.     push    DS
  79.     push    CX
  80.     push    DX
  81.     push    SI
  82.     push    DI
  83.  
  84.     cmp    [_osmajor_##].B,4
  85.     jc    wrabs_16bit
  86.  
  87. wrabs_32bit:
  88.     sub    SP,10
  89.     mov    DI,BX
  90.     mov    BX,SP
  91.     mov    SI,SS
  92.     mov    DS,SI
  93.     mov    [BX],CX        ; sector(Low)
  94.     mov    [BX+2],DX    ; sector(High)
  95.     mov    DX,[BP+4]
  96.     mov    [BX+4].W,DX    ; secno
  97.     mov    [BX+6],AX    ; buf(offset)
  98.     mov    [BX+8],DI    ; buf(segment)
  99.  
  100.     mov    AL,[BP+6]
  101.     mov    CX,-1
  102.     int    26h
  103.     add    SP,12
  104.  
  105.     jmp    wrabs_endop
  106.  
  107. wrabs_16bit:
  108.     mov    DS,BX
  109.     mov    BX,AX
  110.     mov    DX,CX
  111.     mov    CX,[BP+4]
  112.     mov    AL,[BP+6]
  113.     int    26h
  114.     pop    CX
  115.  
  116. wrabs_endop:
  117.     pop    DI
  118.     pop    SI
  119.     pop    DX
  120.     pop    CX
  121.     pop    DS
  122.     pop    BP
  123.  
  124.     sbb    AH,AH
  125.  
  126.     ret
  127.